Node.js Stream API
たぶん古典的なJava 1.3とかの時代からそんなに変わってない?shokai.icon Interfaceは3種類ある
Readable
pipe先にデータを送出する役
Writable
pipeでデータを受け取り、処理する役
Duplex
readableかつwritable
入力を貯めて変換して出力するような役割
トポロジの例
Readable --(chunk)--> Duplex ---> Duplex ---> Duplex ---> Writable
名前がいつも直感と逆になるshokai.icon
データを受信する側を作る時にReadableを使いそうになるが、受信は書き込まれる事なのでWritableを使うのが正解
主観がプログラマーではなくpipeにある
既存のpipeのパーツを使う
readable側なのかwritable側なのか、ライブラリのドキュメントを読む
writable
on('data', callback)
on('error', callback)
on('end', callback)
などのイベントが発火するので、好きなcallbackを書くとデータを取得できる
readable
.write(data)で書き込む
つなぐ
readable.pipe(writable)
pipeのパーツを作る
ReadableもWritableも、いわゆるJavaで言うInterface
Writableは
writable._write(chunk, encoding, next)とwritable._finish()が実装されている事を期待する
継承で実装すると良い
code:js
class MyWritable extends stream.Writable {
_write(chunk, encoding, next) {
console.log(chunk.toString())
next()
}
_final() {
console.log('おわり')
}
}
Readbleは
pipeの向こう側からsizeが要求され、求められたsize分だけデータを送る
つなぐ
readable.pipe(writable)